#!/bin/bash

# 日志清理定时任务脚本
# 用法: 在 crontab 中添加 0 3 * * * /app/scripts/log_cleanup.sh

LOG_DIR="/app/logs"
CLEANUP_LOG="$LOG_DIR/cleanup.log"
DAYS_TO_KEEP=7

echo "$(date): 开始日志清理任务" >> $CLEANUP_LOG

# 创建日志目录（如果不存在）
mkdir -p $LOG_DIR

# 清理超过指定天数的日志文件
find $LOG_DIR -name "*.log" -mtime +$DAYS_TO_KEEP -type f -exec rm -f {} \;

# 清理空的日志文件
find $LOG_DIR -name "*.log" -size 0 -type f -exec rm -f {} \;

# 压缩超过1天的大日志文件（大于10MB）
find $LOG_DIR -name "*.log" -size +10M -mtime +1 -type f | while read file; do
    if [[ "$file" != *".gz" ]]; then
        gzip "$file"
        echo "$(date): 压缩日志文件: $file" >> $CLEANUP_LOG
    fi
done

# 清理临时文件
find /tmp -name "*.tmp" -mtime +1 -type f -exec rm -f {} \;
find /tmp -name "core.*" -mtime +1 -type f -exec rm -f {} \;

# 获取清理统计信息
log_count=$(find $LOG_DIR -name "*.log" -type f | wc -l)
log_size=$(du -sh $LOG_DIR | cut -f1)

echo "$(date): 日志清理完成，当前日志文件数: $log_count，总大小: $log_size" >> $CLEANUP_LOG

# 保持清理日志本身不超过1000行
if [ -f $CLEANUP_LOG ]; then
    tail -n 1000 $CLEANUP_LOG > $CLEANUP_LOG.tmp && mv $CLEANUP_LOG.tmp $CLEANUP_LOG
fi 